#region Referencias
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls; 
using System.Collections.Generic;
#endregion
using Nextel.Utils;
using System.IO;
using System.Drawing.Imaging;
using ICSharpCode.SharpZipLib.Zip;


    public partial class Descarga : PageController
    {
         
        protected override void initialize()
        {
            
            subLlenarControl();
            //lblMensaje.Text = string.Empty;

            btn_descargar.Text = IdiomaCultura.getMensaje(IdiomaCultura.WEB_DESCARGA);
            btnDescargar.Text = IdiomaCultura.getMensaje(IdiomaCultura.WEB_DESCARGA);


            if (!IsPostBack)
            {
 
                fecha_1.Text = StringUtils.getFechaActual();
                fecha_2.Text = StringUtils.getFechaActual();
                fechaFoto.Text = StringUtils.getFechaActual();
                
                txtHoraIni.Value = "00:00";
                txtHoraFin.Value = "23:59";

                if (Request.QueryString["mensaje"] != null)
                {
                    hidMensaje.Value = Request.QueryString["mensaje"].ToString(); 
                    
                }
            }
        }

        private Boolean validarCampos()
        {
            Boolean flag = StringUtils.validarFechaCompleta(fecha_1.Text);
            if (!flag) return false;
            flag = StringUtils.validarFechaCompleta(fecha_2.Text);
            if (!flag) return false;
            flag = StringUtils.validarHoraMinuto(txtHoraIni.Value);
            if (!flag) return false;
            flag = StringUtils.validarHoraMinuto(txtHoraFin.Value);
            if (!flag) return false;

            return flag;

        }

        private Boolean validarCamposFoto()
        {
            Boolean flag = StringUtils.validarFechaCompleta(fechaFoto.Text);
            
            return flag;

        }

        protected void btntDescargar_Click(object sender, EventArgs e)
        {
            if (validarCampos())
            {
                string mensaje = IdiomaCultura.getMensaje(IdiomaCultura.WEB_DESCARGA_EXITOSA);//"Descarga Existosa";  
                string pFecInicio, pFecFin=null;
                pFecInicio = fecha_1.Text.Trim() + " " + txtHoraIni.Value.Trim();
                pFecFin = fecha_2.Text.Trim() + " " + txtHoraFin.Value.Trim();

                DataSet dsDescarga = new DataSet();

                dsDescarga = DBMonitoreo.descargaCabecera(pFecInicio, pFecFin, ((UsuarioBean)Session[SessionManager.USER_SESSION]).codigo);
                
                if ((dsDescarga.Tables[0].Rows.Count > 0))
                {
                    lblMensaje.Text = mensaje;

                    string ServerPath = HttpContext.Current.Server.MapPath("~");
                    Nextel.Utils.FileDownloader.Downloader objDownloader = new Nextel.Utils.FileDownloader.Downloader(ServerPath.Trim());
                    objDownloader.DescargarArchivo(dsDescarga);
                }
                else
                {
                    mensaje = IdiomaCultura.getMensaje(IdiomaCultura.WEB_NODATOS_DESCARGAR);//"No existen datos pendientes por descargar";
                    Response.Redirect("Descarga.aspx?&mensaje=" + mensaje);
                }

            }
            else {
                string mensaje = IdiomaCultura.getMensaje(IdiomaCultura.WEB_ERROR_DESCARGA_DATOS);//"ERROR DATOS INGRESADOS: VERIFIQUE LA FECHA Y HORA.";
                Response.Redirect("Descarga.aspx?&mensaje=" + mensaje);
            }
        }
       

        #region metodos
        private void subLlenarControl()
        {
            UCCargaDescarga1.Descripcion = IdiomaCultura.getMensaje(IdiomaCultura.WEB_DESCARGA);
          
        }
        #endregion


        protected void btn_ejecutar_Click(object sender, EventArgs e)
        {
            Byte[] lbDescarga = subDescargaFoto(fechaFoto.Text.Trim());            
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=Descarga.zip");
            HttpContext.Current.Response.AddHeader("Content-Length",  lbDescarga.Length.ToString());
            HttpContext.Current.Response.ContentType = "application/octet-stream";
            HttpContext.Current.Response.BinaryWrite(lbDescarga);
            HttpContext.Current.Response.Flush();
        }

        private Byte[] subDescargaFoto(String pFecIni)
        {
            List<FotoDato> loListFoto = DBMonitoreo.subDescargaFoto(pFecIni, ((UsuarioBean)Session[SessionManager.USER_SESSION]).codigo);
            MemoryStream stream = new MemoryStream();
            ZipOutputStream oZipStream = new ZipOutputStream(stream);

            string mensaje = IdiomaCultura.getMensaje(IdiomaCultura.WEB_DESCARGA_EXITOSA);//"Descarga Existosa";  

            if (validarCamposFoto())
            {

                if (loListFoto.Count > 0)
                {

                    foreach (FotoDato loFotoDato in loListFoto)
                    {
                        ZipEntry entry = new ZipEntry(loFotoDato.nombreArchivo);
                        entry.Size = loFotoDato.Foto.Length;
                        oZipStream.PutNextEntry(entry);
                        oZipStream.Write(loFotoDato.Foto, 0, loFotoDato.Foto.Length);
                        oZipStream.CloseEntry();
                    }
                }
                else
                {
                    mensaje = IdiomaCultura.getMensaje(IdiomaCultura.WEB_NODATOS_DESCARGAR);//"No existen datos pendientes por descargar";
                    Response.Redirect("Descarga.aspx?&mensaje=" + mensaje);
                }

            }
            else
            {
                mensaje = IdiomaCultura.getMensaje(IdiomaCultura.WEB_ERROR_DATA);//"ERROR DATOS INGRESADOS: VERIFIQUE LA FECHA Y HORA.";
                Response.Redirect("Descarga.aspx?&mensaje=" + mensaje);
            }
            oZipStream.Finish();
            oZipStream.Close();
            return stream.ToArray();
        }

        //private Byte[] SubDescargaInfo(String pFecInicio, String pFecFin)
        //{
        //    List<BeanDescargaInfo> loListDescarga = DBMonitoreo.descargaCabecera(pFecInicio, pFecFin);
        //    MemoryStream stream = new MemoryStream();
        //    ZipOutputStream oZipStream = new ZipOutputStream(stream);

        //    if (loListDescarga.Count > 0)
        //    {

        //        foreach (BeanDescargaInfo loDescargaDato in loListDescarga)
        //        {
        //            ZipEntry entry = new ZipEntry(loDescargaDato.nombreArchivo);
        //            //entry.Size = loDescargaDato.;
        //            oZipStream.PutNextEntry(entry);
        //            //oZipStream.Write(loFotoDato.Foto, 0, loFotoDato.Foto.Length);
        //            oZipStream.CloseEntry();
        //        }
        //    }
        //    oZipStream.Finish();
        //    oZipStream.Close();
        //    return stream.ToArray();

        //}




}
